package com.ksyun.cloudhostalarmprocessing.utils;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

public class MyGenerator {

    private static final String[] tableName = new String[]{ //数据库表名
            "alerts",
            "metrics",
            "rules"
    };

    private static final String author = "李厚航";//项目作者名

    private static final String dbSourceUrl = "jdbc:mysql://127.0.0.1:3306/ksyun?characterEncoding=utf-8";//数据库配置

    private static final String dbUsername = "root";//数据库账号

    private static final String dbPassword = "root";//数据库密码

    private static final String dir = System.getProperty("user.dir") + "/src/main";//文件输出目录

    private static final String parent = "com.ksyun.cloudhostalarmprocessing";//父包名

    /**
     * mybatis-plus代码生成器
     */
    public static void Generator(){
        FastAutoGenerator.create(dbSourceUrl, dbUsername, dbPassword)
                .globalConfig(builder -> {//全局配置
                    builder.author(author) // 设置作者
                            .enableSwagger() // 开启 swagger 模式
//                            .fileOverride() // 覆盖已生成文件
                            .outputDir(dir + "/java") // 指定输出目录
                            .commentDate("yyyy-MM-dd")//注释日期
                            .dateType(DateType.TIME_PACK);//时间策略
                })
                .packageConfig(builder -> {//包配置
                    builder.parent(parent) // 设置父包名
//                            .moduleName("friendsmanage") // 设置父包模块名
                            .mapper("mapper")
                            .service("service")
                            .serviceImpl("service.Impl")
                            .controller("controller")
                            .entity("entity")
                            .xml("mapper.xml")
                            .pathInfo(Collections.singletonMap(OutputFile.xml, dir + "/resources/mapper")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {//策略配置
                    builder.addInclude(tableName)
//                            .addTablePrefix("sys_")//设置表前缀过滤
                            .controllerBuilder()//controller策略配置
                            .enableRestStyle()//开启@RestController注解
                            .serviceBuilder()//service策略配置
//                            .superServiceClass(IService.class)//service接口继承IService
//                            .superServiceImplClass(ServiceImpl.class)//serviceImpl(本项目)继承serviceImpl(mybatis-plus)
                            .mapperBuilder()//mapper策略配置
                            .enableMapperAnnotation()//开启@Mapper注解
//                            .superClass(BaseMapper.class)//实体类继承BaseMapper
                            .entityBuilder()//entity策略配置
                            .enableLombok()//开启Lombok模型
                            .enableTableFieldAnnotation()//开启生成实体时生成字段注解
                            .naming(NamingStrategy.underline_to_camel)//表下划线转驼峰命名
                            .columnNaming(NamingStrategy.underline_to_camel)//表字段命名规则：下划线转驼峰
                            .idType(IdType.ASSIGN_ID);//全局主键类型
//                            .addTablePrefix("t_", "c_"); // 设置过滤表前缀
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }

    public static void main(String[] args) {
        Generator();
    }
}
